package suanfa;
//给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
//你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。
//示例 1：
//输入：nums = [2,2,3,2]
//输出：3
//示例 2：
//输入：nums = [0,1,0,1,0,1,99]
//输出：99

//例子
//假设数组为：[2, 2, 2, 3]，其中 3 是只出现一次的。
//二进制表示：
//2: 0...0010
//3: 0...0011
//我们看每一位：
//第 0 位（最右边）：
//2: 0, 0, 0；3: 1 → sum = 1 → sum % 3 = 1 → 答案第 0 位是 1
//第 1 位：
//2: 1,1,1；3: 1 → sum = 4 → 4 % 3 = 1 → 答案第 1 位是 1
//其他位都是 0
//所以答案是 ...0011 = 3，正确。
public class singleNumber {
    public int singleNumber(int[] nums) {
        int ret=0;
        for(int i=0;i<32;i++){
            int sum=0;
            for(int x:nums){
                if(((x>>i)&1)==1)
                    sum++;
            }
            sum%=3;
            if(sum ==1) ret |=1<<i;
        }
        return ret;
    }
}
